Function.prototype.myApply = function (context, args) {
  // 检查 context 是否为 null 或 undefined，如果是的话，则将其设置为全局对象（在浏览器中是 window，在 Node.js 环境中是 global）
  // 对于严格模式，如果 context 是 null 或 undefined，则不改变 this
  context = context || (typeof global !== 'undefined' ? global : window);
  const uniqueProp = Symbol();
  context[uniqueProp] = this;
  let result;
  if (args === undefined || args === null) {
    result = context[uniqueProp]();
  } else {
    result = context[uniqueProp](...args);
  }
  delete context[uniqueProp];
  return result;
};

// 定义一个测试函数
function greet (greeting, punctuation) {
  return `${greeting}, ${this.name}${punctuation}`;
}

// 定义一个对象
const person = { name: 'Alice' };

// 使用 myApply 调用 greet 函数
const result = greet.myApply(person, ['Hello', '!']);
console.log(result); // 输出: "Hello, Alice!